{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### Background knowledge requirements\n",
    "\n",
    "Required:\n",
    "- Basic arithmetics\n",
    "- Knowledge of matrix and vector multiplications\n",
    "- Very basic knowledge of eigenvalues and eigenvectors\n",
    "\n",
    "Desired:\n",
    "- Numpy-Python"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "from qiskit import BasicAer, execute, QuantumCircuit, QuantumRegister, ClassicalRegister\n",
    "from qiskit.visualization import plot_histogram\n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Combinatorial Optimizations with a gated Quantum Computer\n",
    "\n",
    "#### Introduction\n",
    "Given the task to maximize $C = \\sum_{k = 1}^{m} C_k(z)$, where $z$ is a bit-string $z = z_1z_2...z_n$ and $z_i \\in \\{0, 1\\}$ and each $C_k \\in {0, 1}$.\n",
    "\n",
    "---\n",
    "\n",
    "Example with $n = 3$ and $m = 1$: Let the cost function be\n",
    "\n",
    "$\n",
    "C(z) = \\begin{cases}\n",
    "1 &\\text{if } z_2 = 0 \\wedge z_3 = 1\\\\\n",
    "0 & \\text{otherwise}\n",
    "\\end{cases}\n",
    "$\n",
    "\n",
    "In order to maximize $C$ one should find bit-strings $z = 001$ or $z = 101$. Eventually, in worst-case scenario, this will amount to eight iterations starting from $000$ to $111$.\n",
    "\n",
    "---\n",
    "\n",
    "There are $2^n$ combinations of $z$ to be considered when maximizing $C$. The number of combinations is also equal to the number of iterations that one needs to perform in order to retrieve the maximum of $C$. During each iteration a single combination is used to calculate the cost and afterwards a maximum is attained by finding the maximum element. \n",
    "\n",
    "By using the quantum mechanical principle of superposition all combinations may be regarded simultaneously. This principle inspired an optimization algorithm for gated quantum computers."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cost function in Quantum Mechanics\n",
    "\n",
    "The cost function $C$ can be regarded as an operator (a unitary matrix) acting on a state $|z>$ (vector). \n",
    "\n",
    "#### Single discrete states and superposition\n",
    "Instead of performing the operator $C$ on a single (discrete) state $|z>$, it is wiser to use the operator $C$ on a linear combination of multiple or all states. This new state is an arbitrary state in superposition and is referred to as the wavefunction $|\\psi>$ This wavefunction is a sum of all $z$-states with coefficients $a_z$ in front of each $z$-state.\n",
    "\n",
    "$ |\\psi> = \\sum_z a_z |z> $ where $ \\sum_z |a_z| ^ 2 = 1 $\n",
    "\n",
    "The coefficients $a_z$ are required to meet $l_2$-normalizations.\n",
    "\n",
    "#### The (expectation) value of $C$\n",
    "\n",
    "Starting with the single discrete states. \n",
    "\n",
    "$$ C |z> = \\sum_{k = 1}^{m} C_k(z) |z> = f(z) |z> $$\n",
    "\n",
    "Here, $f(z)$ denotes the eigenvalues of $C$. An eigen set with values and vectors is then retrieved: \n",
    "$ \\text{eigenset} = \\{f(z), z \\in \\{0, 1\\}^n\\} $\n",
    "The largest eigenvalue and its corresponding eigenvector, $f(z')$ and $ |z'>$, gives the largest $C$ labelled $C_{max}$.\n",
    "\n",
    "For a given $|z_k>$ the cost function's expectation value is calculated by:\n",
    "\n",
    "$$ <C_{z_k}> \\; = \\; <z_k|C|z_k> $$\n",
    "\n",
    "On the right-hand side first $C|z_k>$ is calculated where $C$ is a matrix and $|z_k>$ is a vector. This gives us a new vector. The new vector is then multiplied with the conjugate transpose of $|z_k>$, which is denoted as $<z_k|$. A scalar is retrieved being the expectation value of the cost function for that given state.\n",
    "\n",
    "Generalizing the expectation value by using an arbitrary wavefunction yields:\n",
    "$$ <C> \\;=\\; <\\psi | C | \\psi > $$\n",
    "\n",
    "The expectation value for a given wavefunction is always equal or larger than the largest eigenvalue, since the largest eigenvalue is an element of the eigenset. \n",
    "\n",
    "$$ <C> \\;=\\; <\\psi | C | \\psi > \\;=\\; \\sum_z f(z) |a_z|^2 \\\\\n",
    "\\leq \\sum_z f(z') |a_z|^2 = f(z') \\sum_z |a_z|^2 = f(z') $$\n",
    "\n",
    "Thus, $<C>_{max}$ is only obtained when $<C>_{max} = f(z')$, which happens under the condition $|\\psi> = |z'>$.\n",
    "\n",
    "In reality the probability of finding $|z'>$ is $|a_{z'}|^2$ that is not necessarily one. Therefore, one gets close to $<C>_{max}$, hence the term _approximate_ within Quantum Approximate Optimization Algorithm. \n",
    "\n",
    "_Please keep in mind that the bra <.| is not actually meant to be the conjugate transpose of the ket |.>. Practically it is safe to use it that way._\n",
    "\n",
    "#### The goal of QAOA\n",
    "\n",
    "Start with an arbitrary wavefunction $|\\psi>$ and calculate the cost function. Adjust $|\\psi>$ iteratively until it is close to $|z'>$ and therefore close to the maximum cost."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### The Fundamentals of QAOA\n",
    "\n",
    "Rotating the arbitrary state $|\\psi>$ on quantum computers can be done by implementing quantum gates. A rotation may be comprised of a state change or a phase change. A state change, or also called a bit change, could for example change a $|0>$ into a $|1>$. A phase change might induce a change in amplitudes without changing the probability distribution, e.g. (notice the plus and minus signs) \n",
    "\n",
    "$\\frac{1}{\\sqrt{2}}|0> + \\frac{1}{\\sqrt{2}}|1> \\;\\longrightarrow \\;\\frac{1}{\\sqrt{2}}|0> - \\frac{1}{\\sqrt{2}}|1>$.  \n",
    "\n",
    "Two different abstract quantum gates will be used to induce phase and state changes. Both gates are Hermitian and have parameters $\\gamma$ and $\\beta$ that account for the phase and state changes respectively. The parameters will be discussed in more detail later on, but it is wise to give a preliminary view on these parameters. This is done by using the circuit below as an example.\n",
    "\n",
    "The circuit starts off with an arbitrary state $|\\psi>$ with qubits $|a>, |b>, |c>$. At first the $U(C, \\gamma)$ is applied to the circuit. This is called the cost function gate and this abstract gate contains all the information on the cost function. The $\\gamma$-parameter induces phase changes. The second gate, $U(B, \\beta)$ is called the mixing gate and performs state changes. The degree of state changes is dependent on the parameter $\\beta$. The phase and state changes account for traversing the hyper-dimensional complex solution space in which the optimal solution is available (hopefully). \n",
    "\n",
    "<img src=\"qaoabasic.png\" width=750 height=480 />\n",
    "\n",
    "\n",
    "#### Phase Change by $U(C,\\gamma)$\n",
    "\n",
    "This unitary quantum gate has two parameters, $C$ and $\\gamma$, which correspond to the cost function matrix and a phase shift respectively. The phase change quantum gate is defined as $U(C, \\gamma) = e^{-i\\gamma C}$.\n",
    "\n",
    "$$ U(C, \\gamma) = e^{-i\\gamma C} = e^{-i\\gamma \\sum_{k=1}^{m}C_k} = \\prod_{k=1}^{m} e^{-i\\gamma C_k}$$\n",
    "\n",
    "Given that $ |\\psi> = \\sum_z a_z |z> $, applying $U(C, \\gamma)$ to $|\\psi>$ results in\n",
    "\n",
    "$$ U(C, \\gamma)|\\psi> = \\sum_z \\prod_{k=1}^{m} U(C_k(z), \\gamma) a_z |z> $$\n",
    "\n",
    "Since $C_k(z)$ can only be $0$ or $1$ as mentioned in the introduction, the phase change gate results in:\n",
    "\n",
    "$\n",
    "U(C_k(z), \\gamma) = \\begin{cases}\n",
    "1 &\\text{if } C_k(z) = 0\\\\\n",
    "e^{-i \\gamma} & \\text{if } C_k(z) = 1\n",
    "\\end{cases}\n",
    "$\n",
    "\n",
    "A phase change is induced when $C_k(z)$ is 1 or otherwise nothing changes. This is quite similar to controlled quantum gates. The control qubit checks if $C_k(z) = 1$ and, if satisfied, conducts a phase change $e^{-i \\gamma}$ on a target qubit (an auxilary/ancilla qubit mostly). Luckily, there is an existing quantum gate that mimicks this phase change, namely the R$(\\gamma)$-gate.\n",
    "\n",
    "$$ R(\\gamma) = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{-i \\gamma} \\end{bmatrix} $$\n",
    "\n",
    "---\n",
    "\n",
    "**Example of the Phase Change Gate**\n",
    "\n",
    "In a 2 qubit system $|\\psi> = |x_1>|x_2>$ with the following cost functions:\n",
    "\n",
    "$ C_1 = 1 \\text{ if } |x_1> = |1> $\n",
    "\n",
    "$ C_2 = 1 \\text{ if } |x_1> = |1> \\text{ and } |x_2> = |1> $\n",
    "\n",
    "Classically, a truth table may show that the cost function is maximized by the state $|1>|1>$.\n",
    "\n",
    "| $x_1$ | $x_2$ | $C_1$ | $C_2$ | $ C = C_1 + C_2 $ |\n",
    "| ------| ----- | ----- | ----- | ----------------- |\n",
    "| $0$   |  $0$  |  $0$  |  $0$  |       $0$         |\n",
    "| $0$   |  $1$  |  $0$  |  $0$  |       $0$         |\n",
    "| $1$   |  $0$  |  $1$  |  $0$  |       $1$         |\n",
    "| $1$   |  $1$  |  $1$  |  $1$  |       $2$         |\n",
    "\n",
    "\n",
    "Each qubit can be written in an arbitrary state:\n",
    "\n",
    "$ |x_1> = a_0|0> + a_1|1> $\n",
    "\n",
    "$ |x_2> = b_0|0> + b_1|1> $\n",
    "\n",
    "Then the arbitrary wave function becomes:\n",
    "\n",
    "$ |\\psi> = a_0b_0|00> + a_0b_1|01> + a_1b_0|10> + a_1b_1|11> $\n",
    "\n",
    "Then applying $U(C, \\gamma)$ gives:\n",
    "\n",
    "$ U(C, \\gamma)|\\psi> = a_0b_0|00> + a_0b_1|01> + a_1b_0 R(\\gamma)|10> + a_1b_1R(\\gamma)^2|11> $\n",
    "\n",
    "Notice the prefactors at $|10>$ and $|11>$. At the latter state the R$(\\gamma)$-gate is applied twice because this state satisfied both cost functions.\n",
    "\n",
    "All that we need is a Controlled-R$(\\gamma)$-gate.\n",
    "\n",
    "<img src=\"ucy.png\" width=450 height=300 />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### State Change by $U(B, \\beta)$\n",
    "\n",
    "This unitary quantum gates has two arguments, $B$ and $\\beta$, where $B$ is defined as $B = \\sum_{j=1}^{n} \\sigma_j^x$. Here, $\\sigma_j^x$ is an $X$-gate on the $j$'th register. But that will not be exactly relevant, since the state change gate has the B in its exponent as the definition is $ U(B, \\beta) = e^{-i\\beta B} $. This in turn can be written as\n",
    "\n",
    "$$ U(B, \\beta) = e^{-i\\beta B} = e^{-i\\beta \\sum_{j=1}^{n} \\sigma_j^x} = \\prod_{j=1}^{n} e^{-i\\beta \\sigma_j^x} $$\n",
    "\n",
    "The right-hand side tells that a gate matching $ U(B_j, \\beta) = e^{-i\\beta \\sigma_j^x} $ should be applied to every register. Looking up at the Circuit-Library one finds a match:\n",
    "\n",
    "$$ R_x(\\theta) = e^{-i \\frac{\\theta}{2}\\sigma^x} \\Longrightarrow U(B_j, \\beta) = R_x(2\\beta)\\$$\n",
    "\n",
    "This comes down to putting an $R_x(2\\beta)$ gate everywhere.\n",
    "\n",
    "\n",
    "<img src=\"ubb.png\" width=300 height=200 />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Creating a QAOA circuit from the example\n",
    "\n",
    "Then all that is left is to merge $U(C, \\gamma)$ and $U(B, \\beta)$ into a single circuit.\n",
    "\n",
    "<img src=\"singleiteration.png\" width=450 height=300 />\n",
    "\n",
    "Upon measuring the quantum circuit the probability distribution is used to calculate the cost function. The classical approach will be mentioned in a concrete example rather than to have a general discussion about it."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimizing $\\beta$ and $\\gamma$\n",
    "\n",
    "With only two parameters $\\beta$ and $\\gamma$ the accuracy of optimization might be low or undesirable. By using multiple iterations of $U(C, \\gamma)$ and $U(B, \\beta)$ the accuracy goes up. An example below shows a circuit with $p$ iterations of the unitary phase and state changing gates.\n",
    "\n",
    "<img src=\"iterative.png\" width=600 height=300 />\n",
    "\n",
    "If there are $p$ iterations of $U(C, \\gamma)$ and $U(B, \\beta)$, then $2p$ parameters need to be optimized. Therefore, one needs to optimize $(\\vec{\\gamma}, \\vec{\\beta})$ where $\\vec{\\gamma} = \\begin{bmatrix} \\gamma_1 & \\gamma_2 & ... & \\gamma_p \\end{bmatrix}^T$ and $\\vec{\\beta} = \\begin{bmatrix} \\beta_1 & \\beta_2 & ... & \\beta_p \\end{bmatrix}^T$\n",
    "\n",
    "Optimizing these parameters is done by classical optimizers, for example, by COBYLA. In this Jupyter Notebook the classical optimizers are not discussed. It is better to see it happen in real-life and to adjust the type of optimizers for the specific problem that one encounters.\n",
    "\n",
    "Upon performing the measurements a probability distribution is obtained. The probability distribution is then used to calculated an expectation value of the cost function by $<C> = <\\psi|C|\\psi>$. In the number partitioning example a concrete implementation of this process will be highlighted. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Number Partitioning and QAOA\n",
    "\n",
    "### Cost function of Number Partitioning\n",
    "\n",
    "The example used for number partitioning may be found in the previous Jupyter-Notebooks on Number Partitioning. A set $S = \\{1, 3, 4\\}$ needs to be partitioned into two subsets of which the sums of elements are equivalent. The answer should be $S_1 = \\{1, 3\\}$ and $S_2 = \\{4\\}$ or its degenerate counterpart $S_1 = \\{4\\}$ and $S_2 = \\{1, 3\\}$.\n",
    "\n",
    "In the previous Jupyter-Notebook an Ising model of the Number Partitioning problem was derived, which was:\n",
    "\n",
    "$$ \\hat{C} = 6\\sigma_1^z\\sigma_2^z + 8\\sigma_1^z\\sigma_3^z + 24 \\sigma_2^z\\sigma_3^z $$\n",
    "\n",
    "This problem has only three quadratic terms, which can written as a dictionary.\n",
    "\n",
    "_Typically in code an array starts with index 0. To avoid confusion the indices of the equations are followed. Later in the code adjustments will be done and within the code there will be comments specifically dedicated to this._"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# The Ising Model\n",
    "j = dict()\n",
    "j[(1, 2)] = 6\n",
    "j[(1, 3)] = 8\n",
    "j[(2, 3)] = 24"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For this simple example the number of iterations of the U-gates is set to 5. This means that there are 10 parameters that need to be optimized. The parameters are initialized randomly. Two Numpy-arrays called _betas_ and _gammas_ are initialized. The parameters have bounds $(0, \\pi)$. \n",
    "\n",
    "In this example a single array of parameters called _params_ is created by alternating each $\\gamma$ and $\\beta$ from _gammas_ and _betas_. That is:\n",
    "\n",
    "_params_ = $\\begin{bmatrix} \\gamma_1 \\\\ \\beta_1 \\\\ ... \\\\ \\gamma_p \\\\ \\beta_p \\end{bmatrix}$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "p = 5\n",
    "betas = np.pi * np.random.rand(p)\n",
    "gammas = np.pi * np.random.rand(p)\n",
    "\n",
    "params = list()\n",
    "for i in range(0, len(betas)):\n",
    "    params.append(gammas[i])\n",
    "    params.append(betas[i])\n",
    "params = np.array(params)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is not possible to construct a circuit out of the blue. At first, using $H$-gates initializes the quantum circuit and brings all qubits in a superposition. The gate $U(C, \\gamma)$ is problem-specific. Luckily, $U(B, \\beta)$ is a general gate. Therefore, $U(C, \\gamma)$ should be first explicitly and thoroughly constructed. Starting off from its definition $U(C, \\gamma) = e^{-i \\gamma C}$ a circuit will be derived. The cost function $C$ has been mentioned in the introduction and is\n",
    "\n",
    "$$ \\hat{C} = 6\\sigma_1^z\\sigma_2^z + 8\\sigma_1^z\\sigma_3^z + 24 \\sigma_2^z\\sigma_3^z $$\n",
    "\n",
    "$$ U(C, \\gamma) = e^{-i \\gamma C} = e^{-i \\gamma (6\\sigma_1^z\\sigma_2^z + 8\\sigma_1^z\\sigma_3^z + 24 \\sigma_2^z\\sigma_3^z)} $$\n",
    "\n",
    "Using Trotterization, i.e. $e^{-i\\gamma \\sum_{k=1}^{m}C_k} = \\prod_{k=1}^{m} e^{-i\\gamma C_k}$ the sum in the exponent is reduced to a product of exponents.\n",
    "\n",
    "$$ U(C, \\gamma) = e^{-i \\gamma C} = e^{-i 6 \\gamma\\,\\sigma_1^z\\sigma_2^z} e^{-i 8 \\gamma\\,\\sigma_1^z\\sigma_3^z} e^{-i 24 \\gamma\\,\\sigma_2^z\\sigma_3^z} $$\n",
    "\n",
    "Now there are three products of the form $e^{i \\frac{\\gamma}{2}\\,\\sigma_u^z\\sigma_v^z}$.\n",
    "\n",
    "There exists a (series of) quantum gate(s) for this specific form. It is important to take into account the division by $2$ and the minus-sign. The product $e^{i \\frac{\\gamma}{2}\\,\\sigma_u^z\\sigma_v^z}$ is described by: \n",
    "\n",
    "<img src=\"circuitry.png\" width=600 height=300 />\n",
    "\n",
    "Implementing the superposition-initialization, the phase changing gate $U(C, \\gamma)$ and the state changing gate $U(B, \\beta)$ for a **single** iteration gives the following circuit.\n",
    "\n",
    "<img src=\"qaoacirc.png\" width=600 height=300 />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Creating a QAOA circuit from the example\n",
    "\n",
    "Then all that is left is to merge $U(C, \\gamma)$ and $U(B, \\beta)$ into a single circuit.\n",
    "\n",
    "<img src=\"singleiteration.png\" width=450 height=300 />\n",
    "\n",
    "Upon measuring the quantum circuit the probability distribution is used to calculate the cost function. The classical approach will be mentioned in a concrete example rather than to have a general discussion about it."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimizing $\\beta$ and $\\gamma$\n",
    "\n",
    "With only two parameters $\\beta$ and $\\gamma$ the accuracy of optimization might be low or undesirable. By using multiple iterations of $U(C, \\gamma)$ and $U(B, \\beta)$ the accuracy goes up. An example below shows a circuit with $p$ iterations of the unitary phase and state changing gates.\n",
    "\n",
    "<img src=\"iterative.png\" width=600 height=300 />\n",
    "\n",
    "If there are $p$ iterations of $U(C, \\gamma)$ and $U(B, \\beta)$, then $2p$ parameters need to be optimized. Therefore, one needs to optimize $(\\vec{\\gamma}, \\vec{\\beta})$ where $\\vec{\\gamma} = \\begin{bmatrix} \\gamma_1 & \\gamma_2 & ... & \\gamma_p \\end{bmatrix}^T$ and $\\vec{\\beta} = \\begin{bmatrix} \\beta_1 & \\beta_2 & ... & \\beta_p \\end{bmatrix}^T$\n",
    "\n",
    "Optimizing these parameters is done by classical optimizers, for example, by COBYLA. In this Jupyter Notebook the classical optimizers are not discussed. It is better to see it happen in real-life and to adjust the type of optimizers for the specific problem that one encounters.\n",
    "\n",
    "Upon performing the measurements a probability distribution is obtained. The probability distribution is then used to calculated an expectation value of the cost function by $<C> = <\\psi|C|\\psi>$. In the number partitioning example a concrete implementation of this process will be highlighted. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Number Partitioning and QAOA\n",
    "\n",
    "### Cost function of Number Partitioning\n",
    "\n",
    "The example used for number partitioning may be found in the previous Jupyter-Notebooks on Number Partitioning. A set $S = \\{1, 3, 4\\}$ needs to be partitioned into two subsets of which the sums of elements are equivalent. The answer should be $S_1 = \\{1, 3\\}$ and $S_2 = \\{4\\}$ or its degenerate counterpart $S_1 = \\{4\\}$ and $S_2 = \\{1, 3\\}$.\n",
    "\n",
    "In the previous Jupyter-Notebook an Ising model of the Number Partitioning problem was derived, which was:\n",
    "\n",
    "$$ \\hat{C} = 6\\sigma_1^z\\sigma_2^z + 8\\sigma_1^z\\sigma_3^z + 24 \\sigma_2^z\\sigma_3^z $$\n",
    "\n",
    "This problem has only three quadratic terms, which can written as a dictionary.\n",
    "\n",
    "_Typically in code an array starts with index 0. To avoid confusion the indices of the equations are followed. Later in the code adjustments will be done and within the code there will be comments specifically dedicated to this._"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# The Ising Model\n",
    "j = dict()\n",
    "j[(1, 2)] = 6\n",
    "j[(1, 3)] = 8\n",
    "j[(2, 3)] = 24"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For this simple example the number of iterations of the U-gates is set to 5. This means that there are 10 parameters that need to be optimized. The parameters are initialized randomly. Two Numpy-arrays called _betas_ and _gammas_ are initialized. The parameters have bounds $(0, \\pi)$. \n",
    "\n",
    "In this example a single array of parameters called _params_ is created by alternating each $\\gamma$ and $\\beta$ from _gammas_ and _betas_. That is:\n",
    "\n",
    "_params_ = $\\begin{bmatrix} \\gamma_1 \\\\ \\beta_1 \\\\ ... \\\\ \\gamma_p \\\\ \\beta_p \\end{bmatrix}$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "p = 5\n",
    "betas = np.pi * np.random.rand(p)\n",
    "gammas = np.pi * np.random.rand(p)\n",
    "\n",
    "params = list()\n",
    "for i in range(0, len(betas)):\n",
    "    params.append(gammas[i])\n",
    "    params.append(betas[i])\n",
    "params = np.array(params)\n",
    "initial_params = params"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is not possible to construct a circuit out of the blue. At first, using $H$-gates initializes the quantum circuit and brings all qubits in a superposition. The gate $U(C, \\gamma)$ is problem-specific. Luckily, $U(B, \\beta)$ is a general gate. Therefore, $U(C, \\gamma)$ should be first explicitly and thoroughly constructed. Starting off from its definition $U(C, \\gamma) = e^{-i \\gamma C}$ a circuit will be derived. The cost function $C$ has been mentioned in the introduction and is\n",
    "\n",
    "$$ \\hat{C} = 6\\sigma_1^z\\sigma_2^z + 8\\sigma_1^z\\sigma_3^z + 24 \\sigma_2^z\\sigma_3^z $$\n",
    "\n",
    "$$ U(C, \\gamma) = e^{-i \\gamma C} = e^{-i \\gamma (6\\sigma_1^z\\sigma_2^z + 8\\sigma_1^z\\sigma_3^z + 24 \\sigma_2^z\\sigma_3^z)} $$\n",
    "\n",
    "Using Trotterization, i.e. $e^{-i\\gamma \\sum_{k=1}^{m}C_k} = \\prod_{k=1}^{m} e^{-i\\gamma C_k}$ the sum in the exponent is reduced to a product of exponents.\n",
    "\n",
    "$$ U(C, \\gamma) = e^{-i \\gamma C} = e^{-i 6 \\gamma\\,\\sigma_1^z\\sigma_2^z} e^{-i 8 \\gamma\\,\\sigma_1^z\\sigma_3^z} e^{-i 24 \\gamma\\,\\sigma_2^z\\sigma_3^z} $$\n",
    "\n",
    "Now there are three products of the form $e^{i \\frac{\\gamma}{2}\\,\\sigma_u^z\\sigma_v^z}$.\n",
    "\n",
    "There exists a (series of) quantum gate(s) for this specific form. It is important to take into account the division by $2$ and the minus-sign. The product $e^{i \\frac{\\gamma}{2}\\,\\sigma_u^z\\sigma_v^z}$ is described by: \n",
    "\n",
    "<img src=\"circuitry.png\" width=600 height=300 />\n",
    "\n",
    "Implementing the superposition-initialization, the phase changing gate $U(C, \\gamma)$ and the state changing gate $U(B, \\beta)$ for a **single** iteration gives the following circuit.\n",
    "\n",
    "<img src=\"qaoacirc.png\" width=600 height=300 />\n",
    "\n",
    "Now to construct the circuit in qiskit."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Qiskit Implementation\n",
    "For this problem only three qubits are needed. Every qubit is measured eventually, therefore, three classical channels are required. Each time the classical optimization is called the whole circuit needs to be constructed again. Therefore, a method to construct the circuit is used here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ0AAAKcCAYAAABCGZzxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3xUVf7/8dekF0pI6IROaKEIiBQRkCaggLqAihUbIrDW/YnLLuqi66oollVkRVdE/bJiRRFpCiuLaBAFqQEiJEgINZCEEFLm98c1IZM6SWbm3pl5Px+P7MZ779x8criZz5nPPedcm91utyMiIiIiIiIiIiLyuwCzAxARERERERERERFrUdFQREREREREREREHKhoKCIiIiIiIiIiIg5UNBQREREREREREREHKhqKiIiIiIiIiIiIAxUNRURERERERERExIGKhiIiIiIiIiIiIuJARUMRERERERERERFxoKKhiIiIiIiIiIiIOFDRUERERERERERERByoaCgiIiIiIiIiIiIOVDQUERERERERERERByoaioiIiIiIiIiIiAMVDUVERERERERERMSBioYiIiIiIiIiIiLiQEVDERERERERERERcaCioYiIiIiIiIiIiDhQ0VBEREREREREREQcqGgoIiIiIiIiIiIiDoLMDkDEHXbv3l3pMf/85z+ZPn16hcd07NjRVSGJiIiYRnnRc9TWIiIijpQbvZdGGorfevXVV80OQURExDKUFz1HbS0iIuJIudGaVDQUERERERERERERByoaioiIiIiIiIiIiAMVDcVvffjhh2aHICIiYhnKi56jthYREXGk3GhNKhqKiIiIiIiIiIiIAxUNxW+NHz/e7BBEREQsQ3nRc9TWIiIijpQbrUlFQxEREREREREREXEQZHYAYh33v+f5n/nijZ7/mSIiImIta+aa83OHPWzOzxURERFrUB+kYhppKH5r2rRpZocgIiJiGcqLnqO2FhERcaTcaE0qGorfmj59utkhiIiIWIbyoueorUVERBwpN1qTiobitwYOHGh2CCIiIpahvOg5amsRERFHyo3WpKKh+K1jx46ZHYKIiIhlKC96jtpaRETEkXKjNelBKCIiIiLiFa6b05TMs6cICAgkICCQzi368cCEN2gY1dzs0ERERMSH+WsfRCMNxW917tzZ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\n",
      "text/plain": [
       "<Figure size 1694.03x866.88 with 1 Axes>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def qaoa_circuit(params):\n",
    "    # Instantiating a Circuit\n",
    "    n = 3\n",
    "    q = QuantumRegister(3)\n",
    "    c = ClassicalRegister(3)\n",
    "    circ = QuantumCircuit(q, c)\n",
    "    \n",
    "    # Initializing the circuit by Hadamard-Gates\n",
    "    for i in range(n):\n",
    "        circ.h(q[i])\n",
    "    \n",
    "    circ.barrier()\n",
    "    # Creating p times U(C, gamma) and U(B, beta)\n",
    "    for i in range(p):\n",
    "        # 6 * sigma_1 * sigma_2\n",
    "        circ.cx(q[0], q[1])\n",
    "        circ.rz(-12 * params[2 * i], 1)\n",
    "        circ.cx(0, 1)\n",
    "        \n",
    "        # 8 * sigma_1 * sigma_3\n",
    "        circ.cx(0, 2)\n",
    "        circ.rz(-16 * params[2 * i], 2)\n",
    "        circ.cx(0, 2)\n",
    "        \n",
    "        # 24 * sigma_1 * sigma_3\n",
    "        circ.cx(1, 2)\n",
    "        circ.rz(-48 * params[2 * i], 2)\n",
    "        circ.cx(1, 2)\n",
    "        \n",
    "        circ.barrier()\n",
    "        # sigma_x for U(B, beta)\n",
    "        for j in range(n):\n",
    "            circ.rx(2*params[2 * i + 1], q[j])\n",
    "        circ.barrier()\n",
    "    # Putting the measurement gates\n",
    "    circ.measure(q, c)\n",
    "    \n",
    "    return circ\n",
    "\n",
    "circ = qaoa_circuit(params)\n",
    "circ.draw(output='mpl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that the circuit has been constructed, a method to evaluate the results of the circuit needs to be built. Actually, only one method normally suffices for this problem. However, Qiskit never returns states with zero counts as a result in the form of a dictionary. The following two methods are meant to include zero counts states. The last method in the cell afterwards does the actual measuring work."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "These two methods include zero counts. One may skip them for now.\n",
    "\"\"\"\n",
    "\n",
    "from qiskit.ignis.verification.tomography import count_keys\n",
    "\n",
    "def cut_counts(counts, bit_indexes):\n",
    "    bit_indexes.sort(reverse=True)\n",
    "    new_counts = {}\n",
    "    for key in counts:\n",
    "        new_key = ''\n",
    "        for index in bit_indexes:\n",
    "            new_key += key[-1 - index]\n",
    "        if new_key in new_counts:\n",
    "            new_counts[new_key] += counts[key]\n",
    "        else:\n",
    "            new_counts[new_key] = counts[key]\n",
    "\n",
    "    return new_counts\n",
    "\n",
    "def get_all_counts(counts: dict, number_of_qubits):\n",
    "    all_counts = dict()\n",
    "    keys = count_keys(number_of_qubits)\n",
    "    for key in keys:\n",
    "        if key in counts:\n",
    "            all_counts[key] = counts[key]\n",
    "        else:\n",
    "            all_counts[key] = 0\n",
    "    return all_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def circuit_results(circuit):\n",
    "    # A simulator is used here instead of real hardware\n",
    "    backend = BasicAer.get_backend('qasm_simulator')\n",
    "    \n",
    "    # The circuit is executed by the backend with 30000 shots per measurement\n",
    "    shots=30000\n",
    "    result = execute(circuit, backend=backend, shots=shots).result()\n",
    "    \n",
    "    # Getting and return results as a dictionary and as an output_distribution with all values between 0 and 1.\n",
    "    counts = result.get_counts(circuit)\n",
    "    all_counts = get_all_counts(counts, circuit.num_qubits)\n",
    "    output_distribution = [v / shots for v in all_counts.values()]\n",
    "    return all_counts, output_distribution"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Coding the cost function\n",
    "\n",
    "\n",
    "What is firstly needed is to create a cost function matrix from the cost function. \n",
    "\n",
    "$$ \\hat{C} = 6\\sigma_1^z\\sigma_2^z + 8\\sigma_1^z\\sigma_3^z + 24 \\sigma_2^z\\sigma_3^z $$\n",
    "\n",
    "The following matrix is expected.\n",
    "\n",
    "$$ \\hat{C} = \\begin{bmatrix} 38 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ 0 & -26 & 0 & 0 & 0 & 0 & 0 & 0 \\\\ 0 & 0 & -22 & 0 & 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 10 & 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 & 10 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 & 0 & -22 & 0 & 0 \\\\ 0 & 0 & 0 & 0 & 0 & 0 & -26 & 0 \\\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 38 \\end{bmatrix}$$\n",
    "\n",
    "Defining the Pauli-Z matrix and the identity matrix, subsequently taking the tensor products provides the matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 38.   0.   0.   0.   0.   0.   0.   0.]\n",
      " [  0. -26.   0.   0.   0.   0.   0.   0.]\n",
      " [  0.   0. -22.   0.   0.   0.   0.   0.]\n",
      " [  0.   0.   0.  10.   0.   0.   0.   0.]\n",
      " [  0.   0.   0.   0.  10.   0.   0.   0.]\n",
      " [  0.   0.   0.   0.   0. -22.   0.   0.]\n",
      " [  0.   0.   0.   0.   0.   0. -26.   0.]\n",
      " [  0.   0.   0.   0.   0.   0.   0.  38.]]\n"
     ]
    }
   ],
   "source": [
    "Z = np.array([[1, 0], [0, -1]])\n",
    "I = np.eye(2)\n",
    "\n",
    "term1 = 6 * np.kron(Z, np.kron(Z, I))\n",
    "term2 = 8 * np.kron(Z, np.kron(I, Z))\n",
    "term3 = 24 * np.kron(I, np.kron(Z, Z))\n",
    "\n",
    "C = term1 + term2 + term3\n",
    "\n",
    "print(C)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following step is to define an objective function that will be the core of the optimization. In this case a minimization is desired of $<\\psi|C|\\psi>$. Here, $|\\psi>$ is the _final state vector / output distribution_ of the circuit, hence, it is depending on $\\vec{\\gamma}$ and $\\vec{\\beta}$.\n",
    "\n",
    "The objective function is:\n",
    "\n",
    "$$ f(\\vec{\\gamma}, \\vec{\\beta}) = <\\psi(\\vec{\\gamma}, \\vec{\\beta})|C|\\psi(\\vec{\\gamma}, \\vec{\\beta})> $$\n",
    "\n",
    "The following method defines the objective function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def objective_function(params):\n",
    "    # constructing the circuit, in this example, make sure circ already exists\n",
    "    circ = qaoa_circuit(params)\n",
    "    \n",
    "    # retrieve the results of the quantum circuit\n",
    "    output_distribution = circuit_results(circ)[1]\n",
    "    \n",
    "    # calculate the cost function by using the equation above\n",
    "    cost = np.transpose(output_distribution) @ C @ output_distribution\n",
    "    return cost"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Calling the Optimizer\n",
    "\n",
    "Here, COBYLA is used as it is a simple optimizer that gives quite accurate results. The COBYLA optimizer needs two parameters, maximum iterations and the tolerance. The initial parameters for the optimizations are _params_. One can choose to pose bounds on the _params_.\n",
    "\n",
    "As part of visualizing that it works, a histogram will be plotted before and after the optimization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAFDCAYAAABY/1W1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3de3xV5ZX/8c+SSIACLWC5Bow0gBI0GMMP6SDgrbRYM9VSb7Wt9X6vd6dTtVZrx2mtY6fW6lg73sFqtVAratXhEkUwoFCMFaigJCooqICXYOL6/fHspCfhJOwDOTf4vl+vvDhn72dv1k7OOevsZz/P2ubuiIiIyLbtlu0ARERE8oWSpoiISExKmiIiIjEpaYqIiMSkpCkiIhKTkqaIiEhMBdkOIJv22GMPLy4uznYYIiKSQxYtWvSuu38x2bpdOmkWFxdTXV2d7TBERCSHmNnrba1T96yIiEhMSpoiIiIxKWmKiIjEpKQpIiISk5KmiIhITEqaIiIiMSlpioiIxKSkKSIiEpOSpoiISExKmiIiIjEpaYqIiMSkpCkiIhKTkqaIiEhMSpoiIiIxKWmKiIjEpKQpIiISk5KmiIhITEqaIiIiMSlpioiIxKSkKSIiEpOSpoiISExKmiIiIjEpaUreevzxxxkxYgQlJSVcf/31W62/8cYbGTlyJPvttx+HHnoor7/+eov1GzduZNCgQZx77rlbbVtZWcmoUaPSFruI5CclTclLjY2NnHPOOcyaNYuamhqmTZtGTU1Nizb7778/1dXVLF26lKlTp3LZZZe1WH/llVcyceLErfb98MMP071797TGLyL5SUlT8tLChQspKSlh6NChdO7cmeOOO44ZM2a0aHPwwQfTrVs3AA488EBqa2ub1y1atIi1a9fyla98pcU2mzdv5sYbb+SKK65I/0GISN5R0pS8VFdXx+DBg5ufFxUVUVdX12b7O+64g6997WsAfPbZZ1x88cX84he/2KrdlVdeycUXX9ycbEVEEilpSl5y962WmVnStvfeey/V1dVceumlANxyyy1MmTKlRdIFeOmll1i5ciVHHXVUxwcsIjuFgmwHILI9ioqKWLNmTfPz2tpaBg4cuFW7p556iuuuu445c+ZQWFgIwPz585k3bx633HILmzdvZsuWLXTv3p0999yTRYsWUVxcTENDA+vWrWPSpEnMnj07U4clIjnOkn1j31VUVFR4dXV1tsOQ7dDQ0MDw4cN5+umnGTRoEGPGjOH++++ntLS0uc2LL77I1KlTefzxxxk2bFjS/dx5551UV1dz8803t1i+evVqvv71r7Ns2bK0HoeI5B4zW+TuFcnWqXtW8lJBQQE333wzkydPZp999uGYY46htLSUq666ipkzZwJw6aWXsnnzZr71rW8xevRoKisrsxy1iOQ7nWnqTFNERBLoTFNEJLK9RTFef/11DjjgAEaPHk1paSm33npr8zaTJk1ixIgRjB49mtGjR7Nu3bqMHY9klgYCicguo6koxl//+leKiooYM2YMlZWVjBw5srlNU1GMbt268dvf/pbLLruMBx54gAEDBvDcc89RWFjI5s2bGTVqFJWVlc0D0O677z4qKpKenMhORGeaIrLL2JGiGJ07d24egV1fX89nn32W2eAlJyhpisguY0eKYgCsWbOG/fbbj8GDB3P55Ze3mOb0/e9/n9GjR3PttdcmnUcsOwclTRHZZexIUQyAwYMHs3TpUlauXMldd93F2rVrgdA1+7e//Y158+Yxb9487rnnnvQcgGSdkqaI7DJSLYoxc+bM5i7ZRAMHDqS0tJR58+YBMGjQIAB69OjBCSecwMKFC9N0BJJtSpoisssYM2YMK1asYNWqVWzZsoXp06dvNX/3xRdf5IwzzmDmzJn07du3eXltbS0ff/wxAO+99x7PPvssI0aMoKGhgXfffReATz/9lEcffVS3lduJafSsiOwyEotiNDY2cvLJJzcXxaioqKCysrJFUQyAIUOGMHPmTF555RUuvvhizAx355JLLmHfffflww8/ZPLkyXz66ac0NjZy2GGHcdppp2X5SCVdVNxAxQ1ERCSBihuIiIh0ACVNERGRmJQ0RUREYsr4QCAzOxu4FBgAvAxc4O7z2mh7NHAmsD/QBagBrnP3mW20Px64H/iLu389DeFLjjntpvTt+/YL0rdvEclPGT3TNLNjgV8BPyMkwueAWWY2pI1NJgLPAEdE7R8DHjGzg5LseyjwCyBpAhYREdlRme6evQi4091vd/dX3P084C3grGSN3f0H7n69uy9095Xu/hNgEfCNxHZmtjswDfgR8Fp6D0FERHZVGUuaZtYZOAB4stWqJ4Evp7CrHsB7rZZdB6x297u2P0IREZH2ZfKa5h5A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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Plotting the results without optimizing\n",
    "\n",
    "before_optimizing = circuit_results(circ)[0]\n",
    "\n",
    "plot_histogram(before_optimizing)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([2.03274746, 3.1322407 , 1.85321163, 0.74868941, 2.55574176,\n",
      "       1.96431386, 0.51606492, 2.54385796, 2.85461843, 0.60097385]), -10.861309039999998, 76)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from qiskit.aqua.components.optimizers import COBYLA\n",
    "\n",
    "# A COBYLA instance with 500 iterations max and a tolerance level of 0.001\n",
    "optimizer = COBYLA(maxiter=500, tol=0.001)\n",
    "\n",
    "# Performing the optimization\n",
    "ret = optimizer.optimize(num_vars=len(params), objective_function=objective_function, initial_point=params)\n",
    "\n",
    "# Printing the results\n",
    "print(ret)\n",
    "\n",
    "# Using the new parameters and constructing the new parameterized circuit\n",
    "new_params = ret[0]\n",
    "circ_after = qaoa_circuit(new_params)\n",
    "\n",
    "# Getting the results of the optimized circuit\n",
    "after_optimizing = circuit_results(circ_after)[0]\n",
    "\n",
    "# Plotting the results of the optimized circuit\n",
    "plot_histogram(after_optimizing)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The states $|001>$ and $|110>$ are the most optimal solutions now. As a reminder, labels '0' and '1' stand for subset $S_1$ and subset $S_2$ respectively. Solution $(0, 0, 1)$ means $(S_1, S_1, S_2)$ and using it on $\\{1, 3, 4\\}$ gives $S_1 = \\{1, 3\\}$ and $S_2 = \\{4\\}$. Likewise, $(1, 1, 0)$ gives $S_1 = \\{4\\}$ and $S_2 = \\{1, 3\\}$.\n",
    "\n",
    "Thus, a successful implementation of Number Partitioning by QAOA."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
